package org.ivwsqii.template;
/**
 * 模板方法模式
 * 抽象方法
 * 1. DriveTemplate是一个抽象类，我们可以把一些可变的部分封装为抽象方法让子类去做具体实现。
 * 2. DriveTemplate中的drive方法是final的，这样是因为我们不希望子类去覆盖这个方法，因为这个方法中定义了算法的步骤，我们不希望子类改变算法的结构。
 * 3. 所有的步骤方法都是protected的访问修饰符，因为我们希望具体算法的实现只有子类可以访问，对外是不开放的。
 * @author Administrator
 * 1. 保护抽象类中定义算法顺序的方法不被子类修改。
 * 2. 分离可变及不可变部分，让子类自己决定可变部分的实现。
 * 3. 让算法的具体实现对子类开放，对其他类关闭。
 */
public abstract class AbstractMethod {

	/*
	 * 方法执行顺序，子类不可更改
	 */
	public final void start() {
		gameCategory();
		startPlay();
		stop();
		endPlay();
	}

	protected boolean stop() {
		System.out.println("未被打扰");
		return false;
	}

	protected abstract void gameCategory();

	protected void startPlay() {
		System.out.println("开始游戏");
	}

	protected void endPlay() {
		System.out.println("结束游戏");
	}



}
